home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_mc.idb / usr / freeware / lib32 / mc / extfs / unarj.diff.z / unarj.diff
Text File  |  2002-07-08  |  4KB  |  127 lines

  1. diff -bur arj/unarj.c mc/unarj.c
  2. --- arj/unarj.c    Mon Sep 29 14:00:24 1997
  3. +++ mc/unarj.c    Fri Sep 22 21:44:29 2000
  4. @@ -42,6 +42,7 @@
  5.   * 02/17/93  R. Jung     Added archive modified date support.
  6.   * 01/22/94  R. Jung     Changed copyright message.
  7.   * 07/29/96  R. Jung     Added "/" to list of path separators.
  8. + * 02/16/98 pavel@ucw.cz Added v mode, added p mode. THIS IS MODIFIED VERSION.
  9.   *
  10.   */
  11.  
  12. @@ -89,6 +90,7 @@
  13.  uchar  header[HEADERSIZE_MAX];
  14.  char   arc_name[FNAME_MAX];
  15.  int    command;
  16. +char   *file_to_extract;
  17.  int    bitcount;
  18.  int    file_type;
  19.  int    no_output;
  20. @@ -103,6 +105,11 @@
  21.  "        UNARJ l archive        (list archive)\n",
  22.  "        UNARJ t archive        (test archive)\n",
  23.  "        UNARJ x archive        (extract with pathnames)\n",
  24. +"        UNARJ v archive        (list archive with pathnames)\n",
  25. +"        UNARJ p archive file   (print single file from archive to stderr)\n",
  26. +"\n",
  27. +"Warning, this version has been modified by pavel@ucw.cz\n",
  28. +"to be used as virtual fs within mc (Midnight Commander).\n",
  29.  "\n",
  30.  "This is an ARJ demonstration program and ** IS NOT OPTIMIZED ** for speed.\n",
  31.  "You may freely use, copy and distribute this program, provided that no fee\n",
  32. @@ -723,15 +730,24 @@
  33.      if (command == 'E')
  34.          strcpy(name, &filename[entry_pos]);
  35.      else
  36. +        if (command == 'X')
  37.      {
  38.          strcpy(name, DEFAULT_DIR);
  39.          strcat(name, filename);
  40.      }
  41. +    else
  42. +        if (strcmp( &filename[0], file_to_extract ))
  43. +        {
  44. +            skip();
  45. +            return 0;
  46. +        }
  47. +            else
  48. +            strcpy( name, "stderr" );
  49.  
  50.      if (host_os != OS)
  51.          default_case_path(name);
  52.  
  53. -    if (file_exists(name))
  54. +    if ((command != 'P') && file_exists(name))
  55.      {
  56.          printf(M_FEXISTS, name);
  57.          printf(M_SKIPPED, name);
  58. @@ -739,7 +755,10 @@
  59.          error_count++;
  60.          return 0;
  61.      }
  62. +    if (command != 'P')
  63.      outfile = file_open(name, writemode[file_type & 1]);
  64. +    else
  65. +        outfile = stderr;
  66.      if (outfile == NULL)
  67.      {
  68.          printf(M_CANTOPEN, name);
  69. @@ -865,9 +884,12 @@
  70.      strcpy(fmode_str, "    ");
  71.      if (host_os == OS)
  72.          get_mode_str(fmode_str, (uint) file_mode);
  73. -    if (strlen(&filename[entry_pos]) > 12)
  74. +    if ((strlen(&filename[entry_pos]) > 12) || (command == 'V'))
  75. +        if (command != 'V')
  76.          printf("%-12s\n             ", &filename[entry_pos]);
  77.      else
  78. +        printf("%s\n             ", filename);
  79. +    else
  80.          printf("%-12s ", &filename[entry_pos]);
  81.      printf("%10ld %10ld %u.%03u %s %08lX %4s%c%c%c%u%c%c%c\n",
  82.          origsize, compsize, r / 1000, r % 1000, &date_str[2], file_crc,
  83. @@ -910,11 +932,13 @@
  84.      {
  85.          switch (command)
  86.          {
  87. +        case 'P':
  88.          case 'E':
  89.          case 'X':
  90.              if (extract())
  91.                  file_count++;
  92.              break;
  93. +        case 'V':
  94.          case 'L':
  95.              list_arc(file_count++);
  96.              skip();
  97. @@ -934,6 +958,7 @@
  98.              file_count, torigsize, tcompsize, r / 1000, r % 1000, &date_str[2]);
  99.      }
  100.      else
  101. +    if (command != 'V')
  102.          printf(M_NBRFILES, file_count);
  103.  
  104.      fclose(arcfile);
  105. @@ -977,14 +1002,20 @@
  106.          if (strlen(argv[1]) > 1)
  107.              error(M_BADCOMND, argv[1]);
  108.          command = toupper(*argv[1]);
  109. -        if (strchr("ELTX", command) == NULL)
  110. +        if (strchr("ELTXV", command) == NULL)
  111.              error(M_BADCOMND, argv[1]);
  112.          arc_p = argv[2];
  113.      }
  114.      else
  115.      {
  116. +        command = toupper(*argv[1]);
  117. +    if ((command!='P') || (argc != 4))
  118. +    {
  119.          help();
  120.          return EXIT_FAILURE;
  121. +    }
  122. +    file_to_extract = argv[3];
  123. +    arc_p = argv[2];
  124.      }
  125.  
  126.      strncopy(arc_name, arc_p, FNAME_MAX);
  127.